hyperyonfandomcom_fr-20200213-history
Python
Récupérer le presse-papier (Windows) *Gestionnaire de liens (Windows) *Afficheur de VDM *Lanceur de programmes (Windows) *Téléchargeur musique Youtube (Windows) Commentaire # En langage Python, l'ajout d'un commentaire est précédé du caractère dièse '#' pour faire des commentaires sur plusieurs lignes Jeu de caractères Il est fortement recommandé d'insérer un de ces jeux de caractères suivant. Le pseudo-commentaire se fait généralement à la première ligne du script. # -*- coding:Utf-8 -*- # -*- coding:Latin-1 -*- Pour être certain que le script sera bien interprété, il est conseillé d'utiliser l'utf-8 Encodage utilisé Pour savoir quel charset est utilisé, entrez les instructions suivantes dans l'interpréteur Python : import 'sys '''print '''sys.stdout.encoding Indentation En Python, l'indentation est obligatoire sinon vous allez générer des erreurs... Lorsque vous voulez effectuer un 'if' ou un 'while', vous devez indenter chaque bloc de codes respectif, en général on prend soit 4 espaces, soit une tabulation (mais il est préférable d'utiliser les espaces). var = 35 '''if '(var < 35): 'print '"La variable ne vaut pas 35" '''else: print '"La variable vaut 35 ou plus" #oubli d'indentation ce qui va provoquer une erreur Importer un module '''from '''math '''import '* #'*' permet d'importer l'ensemble des fonctions disponibles dans le module math Variables Il n'y a pas besoin d'indiquer en Python le type de variable lorsqu'on déclare cette dernière. Python se charge automatiquement du type de variable adéquat, il peut même si besoin modifier le type de la variable de façon dynamique, au cours de l'exécution du script. #Il est possible de déclarer les variables ainsi var1, var2, var3 = 25, 23.3, "Hello world !" '''print '''var1, var2, var3 '''print '''type(var1), type(var2), type(var3) Résultat : Autre façon de déclarer var1 = var2 = 33 '''print '''var1, var2 Modifier variable globale Si l'on se trouve dans une fonction ayant une variable portant le même nom qu'une variable globale. On peut spécifier à la fonction qu'il faut traiter la variable globale et non celle locale. Ceci se fait en mettant le mot clé global devant la variable à modifier #pour utiliser une variable globale, #toujours rajouter cette ligne en premier sans affection ! '''global '''var var = 0 Vérifier l'existence d'une variable Pour une variable locale a = 'tchoum' '''if 'a' in locals() : print 'True' Variable globale gps = 'global positioning system' if 'gps' in globals(): print 'Roger That' Pour un attribut d'une classe/objet class Heure: inter = 'calaire' if hasattr(Heure, 'inter') : print 'Ding Dong' Structures de contrôle if, elif, else var = 10 if '(var > 10): #Les parenthèses ici sont facultatives, néanmoins on peut les garder pour une question de lisibilité '''print '"La variable est supérieur à 10" 'elif '(var < 10): 'print '"La variable est inférieur à 10" '''else: print '''"La variable est égale à 10" while a = 0 '''while(a < 5): print '''"Hello" a += 1 for Le for en Python possède un fonctionnement différent par rapport à d'autres langages (e.g C/C++). En effet cette instruction se contente pas de boucler x fois mais parcourt chaque case d'une liste ou d'une chaine de caractères. liste = "texte2", "texte3" '''for '''maVariable '''in '''liste: # ajout de la virgule pour afficher les valeurs sans saut de ligne '''print '''maVariable, chaine = "Helloworld !" '''for '''variable '''in '''chaine: '''print '''variable, Attention : il n'est pas possible d'utiliser de for sur des valeurs numériques simples (par contre cette instruction est applicable sur des tableaux de valeurs numériques). La première boucle affichera : Seconde boucle : Parcours d'une liste de listes Attention, les sous-listes doivent toute contenir le même nombre d'éléments element = ['aaa', 'bbb', 'ccc'] '''for '''chiffre, lettre '''in '''element: '''print '''chiffre, lettre Liste Une liste est un ensemble de données dont chaque élément peut posséder un type différent (str, int, float etc...), elle peut notamment contenir d'autres listes. Une liste se déclare ainsi : liste = "element2", "element3" Il est possible de parcourir cette liste, à condition de connaître l'index du ou des éléments que l'on souhaite consulter et/ou modifier. '''print '''liste0, liste2 # si on ne précise pas l'index, on affiche alors le contenu de toute la liste '''print '''liste Résultat : On peut notamment rajouter un élément en fin de liste avec append() ou supprimer un élément quelconque si l'on connaît son index avec la fonction del() liste.append("monElement") # ajoute un élément '''del(liste3) #supprime l'élément lié à l'index #syntaxte équivalente del 'liste3 liste.remove("monElement") Il est possible aussi de rajouter un élément à un endroit précis dans la liste grâce à l'utilisation de ''insert(position, data) liste = 'poire' liste.insert(1, 'fraise') 'for '''element '''in '''liste: '''print '''element, Nous donnera donc Parcourir une liste ''listedebut:fin:pas (borne du début est incluse, celle de la fin est excluse) liste = '1er','2eme','3eme','4eme','5eme' '''print '''liste:3 # équivaut à print liste0:3 '''print liste3: # équivaut à print liste3:5 print liste1:4 print liste::2 # équivaut à print liste0:5:2 Inverser une liste (permet aussi de la parcourir) print '''liste::-1 List unpacking z = 1,2,3,'soleil' a,b,c,d = z '''print a,b,c,d a = 'deux', 'trois' c, w = a:1, a1: print w, c Fonctions sur les listes sort() : Extrêmement pratique, cette fonction vous trie dans l'ordre croissant et alphabétique votre liste print 'maListe.sort() # ne marchera pas maListe.sort() '''print '''maListe # marche Il y a possibilité de trier une liste de listes à partir du n-ième élement de chaque liste (marche aussi avec sorted) '''import '''operator liste = [45,3, 5, 1, 2] liste.sort(key=operator.itemgetter(1)) sorted() : est similaire à sort() mais ce dernier ne modifie pas la liste originale, elle se contente de retourner une copie de la liste '''print '''sorted(maListe) '''print '''sorted(maListe, reverse='True) #inverse *reverse() : Inverse tout le contenu de votre liste *append() : ajoute un élément supplémentaire en fin d'une liste *del() : supprime un élément dont on aura indiquer son index *pop(n) : supprime le n-ième élément d'une liste et renvoie sa valeur. Si n n'est pas spécifié, la fonction supprimera le dernier élément de la liste. *insert(n, v) : insère à la n-ième position la variable v Pour déplacer un élément dans une liste : liste.insert(newIndex, liste.pop(oldIndex)) Concaténer deux listes Tout simplement en faisant ceci : maListe = maListe + autreListe #équivalent maListe += autreListe Les éléments de la liste ajoutée (autreListe) seront positionnés en dernier dans la liste principale (maListe) Concaténer en respectant les positions des éléments liste1 = 'b', 'c' liste2 = 2, 3 maListe = zip(liste1, liste2) #renvoie une liste de tuples print 'maListe Différentes manières de manipuler les listes Déconseillé nombre = 2, 3, 4, 5, 6, 7, 8, 9 carre = [] '''for '''chiffre '''in '''nombre: carre.append(chiffre*chiffre) '''for '''valeur '''in '''carre: '''print '''valeur, Perfectible nombre = 2, 3, 4, 5, 6, 7, 8, 9 '''for '''index, chiffre '''in '''enumerate(nombre): nombreindex = chiffre*chiffre '''for '''valeur '''in '''nombre: '''print '''valeur, Minimaliste '''for '''valeur '''in '[nb **2 'for '''nb '''in '''xrange(1,10)]: '''print '''valeur, ou '''print '[valeur 'for '''valeur '''in '[nb **2 'for '''nb '''in '''xrange(1,10)] ou tout simplement '''print '** 2 '''for '''nb '''in '''xrange(1,10) Ces trois morceaux de code font exactement la même chose : n.b : il semblerait que l'utilisation de nb ** 2 soit très gourmand en temps d'éxecution. Si votre script doit boucler un grand nombre de fois, il vaut mieux adopter cette écriture là : '''print [nb * nb for nb in xrange(1,10)] Modifier une liste Admettons que vous ayez une liste de string, et que vous voulez rajouter un préfixe sur chacune de ces chaînes. On pourrait faire quelque chose comme ça : liste = 'cool','sympa','pratique', autreListe = [] for '''element '''in '''liste: autreListe.append("super"+element) Mais il y a plus simple et rapide, en utilisant que la liste originale. liste = 'cool','sympa','pratique', liste = for element in liste Uniformiser une liste Vous avez une liste contenant d'autres listes comme ceci : listeDeListe = [6, 45, 13, 24, 65, 39, 95] et vous souhaiteriez la mettre sous cette forme là : 6, 45, 13, 65, 24, 65, 39, 326, 95 Solution 1 : listeUniforme = [] '''for '''liste '''in '''listeDeListe: '''for '''nombre '''in '''liste: listeUniforme.append(nombre) Solution 2 (plus rapide mais un peu plus difficile à comprendre) : listeUniforme = '''for '''liste '''in '''listeDeListe '''for '''nombre '''in '''liste On obtient bien ceci : Tuples Déclaration Elle se fait ainsi, chaque élément du tuple doit se '''terminer par une virgule, y compris pour le dernier élément. Les parenthèses sont ici facultatives, mais il est vivement conseillé d'en mettre pour lever toute ambiguïté unTuple = ('hello', 'bonjour',) print type(unTuple), unTuple Tuple unpacking monTuple = ('merci', 'au revoir',) var1, var2 = monTuple #var1 et 2 deviennent alors des strings print var1, var2 Dictionnaire Déclaration dico = {'computer ': 42, 'papier': 'sheet'} dico'cle' = 'blablabla' Si les clés ne sont constituées que de chaînes de caractères, on peut définir un dictionnaire ainsi : autreDico = dict(element=2, autreElement='whatever') Fonctions keys() affiche les clés disponibles dans le dictionnaire dico = dict(premier=1, second=2) print dico.keys() has_key() détermine si la clé spécifiée existe dico = dict(element='blabla') print dico.has_key('unElement'), dico.has_key('element') values() affiche les valeurs disponibles du dictionnaire dico = dict(element=13) print dico.values() items() : affiche chaque élément avec sa clé sous forme de tuple Fonctions prédéfinies type() : affiche le type de la variable len() : indique la taille de la chaîne de caractères input() : équivalent au cin en c++ raw_input() : équivalent à input() mais retourne une variable de type string obligatoirement int() : permet de convertir un nombre considéré comme chaîne de caractères en une variable de type integer float() : idem mais en type float str() : de même mais en string hex() : convertit un nombre décimal en hexadécimal bin() : convertir un nombre décimal en binaire ord() : renvoi la valeur décimale ASCII du caractère replace() : remplacement de caractères dans une chaîne var = 'Tom ou Jerry' var.replace('ou', 'et') format() : vous évite à ouvrir et fermer des guillements lorsque vous avez beaucoup de variables à afficher jour = "Lundi" heure = 13 minute = 37 seconde = "00" print '''"Nous sommes {} il est {}h{}min{}s".format(jour, heure, minute, seconde) index() : affiche la position de l'élément var = 'poire','kiwi','mangue' mot = 'sorbet à la fraise' '''print var.index('mangue') print mot.index('o') Affichera respectivement et Afficher la version de Python dans un script : import sys print sys.version_info split() : découpe une chaine de caractères avec l'espace pour délimiteur par défaut chaine = autreChaine = 'Je suis chez ce cher Serge' print chaine.split() print autreChaine.split('chez') (attention, le split conserve les espaces dans ce cas de figure) join() : concatène une liste de chaînes liste = 'pruneau', 'piano', pruneau' print .join(liste) isinstance(variable, type) : détermine si la variable correspond au type défini chaine = 'de montagnes' '''print' isinstance(chaine, int), isinstance(chaine, str) Fonction aléatoire import 'random #intervalle de 1 à 4000 pour génération (pseudo) aléatoire. valeur = random.randint(1,4000) Fonction xrange Génère une plage de valeurs dont vous aurez limité les bornes xrange(valDébut, valFin, pas) '''for '''valeur '''in '''xrange(0, 11, 2): '''print '''valeur, Résultat '''for '''valeur '''in '''xrange(3): '''print '''valeur, Résultat '''for '''valeur '''in '''xrange(3, 9): '''print '''valeur, Résultat Fonctions originales '''def '''maFonction(argument1, argument2): #les instructions que doit effectuer votre fonction ' return 'quelqueChose # il est possible que la fonction retourne une valeur #autre possibilité, on peut mettre des valeurs par défaut aux arguments '''def '''fonction(val = 25, string = "Hi guy !"): #blablabla #appel de la fonction maFonction(arg1, arg2) #dans le cas où l'on a mis des valeurs par défaut aux arguments d'une fonction #on peut se permettre de les mettre dans le désordre lors de son appel fonction(string = "Ok go !", val = 11) Nombre de paramètres inconnu '''def '''uneFonction(*parametresInconnus): Plusieurs valeurs de retour '''def '''uneFonction(): '''return '''3, "ceci est une phrase" var1, var2 = uneFonction() '''print '''var1, var2 Classe '''class '''uneClasse: #définition d'une classe en Python variable = 25 # création d'un attribut #obligation de mettre un self même si il n'y pas d'argument utilisé ' def 'uneFonction(self): print "hello", uneClasse.variable uneClasse.variable += 25 '''def '''autreFonction(self, parametre): print parametre #les attributs sont disponibles avant même une quelconque instantiation ' print '''uneClasse.variable maClasse = uneClasse() #instanciation de la classe '''print '''maClasse.variable #appel des méthodes de la classe uneClasse maClasse.uneFonction() #modification de la valeur de l'attribut via la méthode maClasse.autreFonction('essai') '''print '''maClasse.variable uneClasse.variable = 32 # seconde modification par simple affectation de valeur '''print '''maClasse.variable Affichage Il est possible d'afficher plusieurs éléments sur une même ligne en ajoutant une virgule à la fin de l'instruction print i = 0 '''while '''i < 10: '''print '''i, # on oublie pas d'incrémenter la variable sinon on aura une boucle infinie i += 1 Résultat : Utilisation guillemets ou simple quote ? Ces deux caractères sont acceptés sous Python pour définir une chaine de caractères. Cependant si votre chaine de caractère comporte des simples quotes (apostrophes) alors délimiter votre chaine par des guillemets et si il y a des guillemets faites le avec des simples quote. Fichier Ecriture str = "chaine de caractères à écrire" #ouverture du fichier en écriture sans effacement fichier = open('chemin_du_fichier/nom_du_fichier.extension','a') fichier.write(str) fichier.close() # fermeture du fichier Lecture fichier = open('chemin_du_fichier', 'r') # ouverture du fichier en lecture seule buf = fichier.read() #renvoi tout le contenu du fichier buf = fichier.readline() #idem mais ligne par ligne buf = fichier.readlines() #affiche le contenu sans saut de ligne fichier.close() # on n'oublie pas de fermer le flux Options d'ouverture fichier *'r' indique que le fichier sera seulement lu (‘read’) *'w' indique qu’on va seulement écrire dans le fichier (‘write’). Ouverture (ou création fichier) avec écrasement données *'a' indique que l’on ouvre le fichier en écriture mais sans écraser le contenu existant déjà. *'r+' indique que l’on ouvre le fichier à la fois en ouverture et en écriture.' *'a+' ouverture en écriture / lecture + création de fichier si inexistant Fonctions fichiers truncate(octet) : tronque un fichier au n-ième octet seek(): replace le curseur au n-ième octet fichier.seek(0) # le repositionne au début de fichier Threads '''import threading def f1(): for i in xrange(0, 1000): print i thread1 = threading.Thread(None, f1, None) thread1.start() Gestion signaux import 'signal '''import '''sys '''def '''signal_handler(signal, frame): derniereFonction(); '''print ''arrêt du script en cours...' sys.exit(0) 'def '''derniereFonction(): '''print ''ko' data = 3 + 3 'print '''data signal.signal(signal.SIGINT, signal_handler) '''while '''True: '''print ''ok' Dans la fonction signal_handler(), vos instructions doivent se tenir sur une seule ligne (séparez les par des point-virgules), autrement vous aurez une erreur d'indentation. Exceptions '''try: #bloc d'instructions à essayer except: #bloc d'instructions à exécuter si ça échoue finally: #bloc à exécuter dans tous les cas Récupérer le contenu d'une page Il suffit d'utiliser le module urllib comme ci-dessous : import urllib f = urllib.urlopen("http://python.org") print f.read() Vous pouvez notamment utiliser le module urllib2 import '''urllib2 data = urllib2.urlopen("www.monsite.fr") '''print '''data.read() Définir un user agent à l'entête '''import urllib2 opener = urllib2.build_opener() opener.addheaders = 'Opera/9.80') data = opener.open(request) Utiliser un proxy proxy = urllib2.ProxyHandler({'http': 'adresseIp:port'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) Ensuite, il suffit de faire comme ci-dessus pour accéder au contenu d'une page Profilage Exemple import time def func1(): for valeur in xrange(1,1000000): valeur = valeur **2 def func2(): for chiffre in xrange(1,1000000): chiffre = chiffre * chiffre def func3(): for pouet in xrange(1,1000000): pouet*=pouet time_dep=time.time() func1() print 'f1 : ',time.time()-time_dep time_dep=time.time() func2() print 'f2 : ',time.time()-time_dep time_dep=time.time() func3() print 'f3 : ',time.time()-time_dep Les valeurs sont exprimées en secondes. Passer des arguments à un script Python Le passage d'arguments à un script se fait ainsi : 'import '''sys argument1 = sys.argv1 argument2 = sys.argv2 Lors de l'exécution du script, on procédera ainsi : python monScript.py arg1 arg2 (Attention, sys.argv0 n'est pas un argument dans le cadre de notre script, en effet elle prend pour valeur ''monScript.py)